package appcontroltareas;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class CronNotificacion {
	
	public static final int HORAS_NOTIFICACION_DECLARACION_JURADA = 5;
	public static final int HORAS_NOTIFICACION_CARTA_FIANZA = 5;
	public static final int HORAS_NOTIFICACION_TAREA_GENERAL = 4;

	private ArrayList<Notificacion> notificaciones;
	
	public CronNotificacion(){		
		notificaciones = new ArrayList<Notificacion>(); 
	}	
	
	public int enviarNotificacionDeclaracionJurada(){
		Tarea tarea = null;
		int totalNotificacionDeclaracionJurada = 0;
		
        for( Notificacion notificacion  : notificaciones){
        	tarea = notificacion.getTarea();
        	//Verificamos que tenemos solo las notificacion declaracion jurada
        	if(notificacion.getModulo() == DeclaracionJurada.MODULO){
        		//Verificamos que estado de la tarea no se haya completado
	            if (tarea.getEstado() != Tarea.ESTADO_COMPLETADO){
	               	//Verificamos que este dentro del tiempo de notificacion	         
	            	if(getDiferenciaFechaActual(tarea.getFechaVencimiento()) < HORAS_NOTIFICACION_DECLARACION_JURADA){
	            		//Mostramos notificacion en pantalla
	            		System.out.println(notificacion.getcuerpoMensaje());
	            		totalNotificacionDeclaracionJurada++;
	            	}	            	
	            }    
        	}
        }
        
        return totalNotificacionDeclaracionJurada;
	}
	
	public int enviarNotificacionCartaFianza(){
		Tarea tarea = null;
		int totalNotificacionCartaFianza= 0;
		
        for( Notificacion notificacion  : notificaciones){
        	tarea = notificacion.getTarea();
        	//Verificamos que tenemos solo las notificacion carta fianza
        	if(notificacion.getModulo() == CartaFianza.MODULO){
        		//Verificamos que estado de la tarea no se haya completado
	            if (tarea.getEstado() != Tarea.ESTADO_COMPLETADO){
	               	//Verificamos que este dentro del tiempo de notificacion	         
	            	if(getDiferenciaFechaActual(tarea.getFechaVencimiento()) < HORAS_NOTIFICACION_CARTA_FIANZA){
	            		//Mostramos notificacion en pantalla
	            		System.out.println(notificacion.getcuerpoMensaje());
	            		totalNotificacionCartaFianza++;
	            	}	            	
	            }    
        	}
        }
        
        return totalNotificacionCartaFianza;
	}	
	
	public void actualizarEstadoNotificacion(Notificacion notificacion, String estado){
		//Validamos que sea el usuario responsable de la tarea
		if(notificacion.validarUsuarioResponsable())
			notificacion.cambiarEstadoTarea(estado);
	}
	
	public long getDiferenciaFechaActual(String fechaVencimiento){
		long milisegundosPorHora = 60 * 60 * 1000;
		long diferenciaFechas = 0;
		
		Date fechaActual = new Date();
    	Date fechavence = getdate(fechaVencimiento);
    	diferenciaFechas = ((fechavence.getTime() - fechaActual.getTime())/milisegundosPorHora);		
    	
    	return diferenciaFechas;
	}
	
	public Date getdate (String date){
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		try{
			return df.parse(date);
		}catch (ParseException ex) {ex.printStackTrace();}
		  return null;
	}
}
